package proxy_;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyInvocationHandler implements InvocationHandler {

    // 被代理的对象
    private Object proxyObj;

    public MyInvocationHandler(Object proxyObj) {
        this.proxyObj = proxyObj;
    }

    /*
        就是代理的方法, 后面在调用的时候, 执行的就是代理方法
        Method method: 当前调用的方法
        Object[] args: 调用方法的实参
        目标方法可能有返回值, 返回值最终在调用代理对象的时候也要返回
         */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 校验参数, 如果参数不合法,进行拦截
//        if(true) {
//            throw new RuntimeException();
//        }
        System.out.println("记录参数到log...");

        // 调用目标方法
        // 有返回值, 就是目标方法的返回值
        Object result = method.invoke(proxyObj, args);

        System.out.println("记录响应信息到log...");

        return result;
    }
}
